/* 
 * File:   OperacionActualizacionEstadoRepositorioLocal.h
 * Author: maximiliano
 *
 * Created on 15 de junio de 2013, 10:41
 */

#ifndef OPERACIONACTUALIZACIONESTADOREPOSITORIOLOCAL_H
#define	OPERACIONACTUALIZACIONESTADOREPOSITORIOLOCAL_H

#include <stdint.h>
#include "client_FileServiceProxy.h"
#include "client_Operacion.h"
#include "common_Repositorio.h"
#include "common_RepoItem.h"
#include "common_FileUtils.h"

using namespace TP::Archivos;
using namespace TP::Servicios;

namespace TP { namespace Operaciones {
    
class OperacionActualizacionEstadoRepositorioLocal : public Operacion  {
public:
    OperacionActualizacionEstadoRepositorioLocal(const uint32_t &pToken, Repositorio **pRepositorioLocal, Repositorio **pRepositorioServidor, FileServiceProxy* pFileService);
    
    virtual ~OperacionActualizacionEstadoRepositorioLocal();
       
    virtual void ejecutar();
    
    virtual void procesarRespuesta (vector<string> &pRespuesta);  
    
    void ActualizarRepositorioLocal();
    
    // void evaluarArchivo(const string& pNombreArchivo);

    bool esArchivoNuevoDesdeServidor(const string &pNombreArchivo);
    
    bool esArchivoModificadoDesdeServidor(const string &pNombreArchivo);
    
    void analizarArchivosEliminadosDesdeServidor ();
    
    void AnalizarArchivosNuevosOModificadosDesdeServidor();
    
    void ConfigurarDescargaArchivoNuevo (RepoItem* pItem);
    
    void ConfigurarActualizacionArchivoModificadoDesdeServidor(RepoItem*pItem);

    void AnalizarArchivosNuevosOModificadosDesdeCliente();    
    
    void AnalizarArchivosEliminadosDesdeCliente();

    bool EsArchivoNuevoDesdeRepositorioLocal(const string &pNombreArchivo );

    void ConfigurarCargaArchivoNuevo(const string &pNombreArchivo);

    bool EsArchivoModificadoDesdeCliente(const string &pNombreArchivo );

    void ConfigurarActualizacionArchivoDesdeCliente(const string &pNombreArchivo);    
    
private:

    Repositorio **_repositorioLocal
              , **_repositorioServidor;
    
    FileServiceProxy *_fileService;
    FileUtils _fileUtils;
};
}}

#endif	/* OPERACIONACTUALIZACIONESTADOREPOSITORIOLOCAL_H */

